package newx.com.control.tree
{
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	
	import newx.com.NxUIComponent;
	import newx.com.control.text.NxTextFormatManager;
	
	/**
	 * 树组件
	 * 1、节点定义：类型Array[显示文本，父节点，子节点数组，图标，节点参数] 
	 * @author wangjun
	 * 
	 */	
	public class NxTree extends NxUIComponent
	{
		/**包含节点的信息的Array*/
		private var _dataProvider		:Array;
		
		/**需要显示的节点数组*/
		private var _showListArr		:Array;
		
		/**
		 * 用于标示控件显示是否改变。
		 * */
		private var _viewChanged		:Boolean	=	false;
		
		/**
		 * 已经打开的索引号数组。
		 * */
		private var _openIndexs		:Array;
		
		/**
		 * x方向每级偏移量
		 * */
		private var _xOffSize			:Array;
		
		/**
		 * y方向每级偏移量
		 * */
		private var _yOffSize			:Array;
		
		/**
		 * 用于记录文本样式
		 * */
		private var _defaultTxt		:TextField;
		
		/**
		 * 默认文本样式
		 * */
		private var _format			:TextFormat;
		
		
		
		public function NxTree()
		{
			super();
			init();
		}
		
		/**
		 * y方向偏移量
		 * */
		public function get yOffSize():Array
		{
			return _yOffSize;
		}

		/**
		 * @private
		 */
		public function set yOffSize(value:Array):void
		{
			_yOffSize = value;
		}

		/**
		 * x方向偏移量
		 * */
		public function get xOffSize():Array
		{
			return _xOffSize;
		}

		/**
		 * @private
		 */
		public function set xOffSize(value:Array):void
		{
			_xOffSize = value;
		}

		private function init():void
		{
			addEventListener(Event.ENTER_FRAME,checkView);
			
			//设置默认值
			
			xOffSize	=	[10,10,10,10,10];
			yOffSize	=	[20,20,20,20,20];
			
			_defaultTxt	=	new TextField();
			_format		=	new TextFormat();
		}
		
		/**
		 * 检查显示改变
		 * */
		private function checkView(e:Event):void
		{
			if(_dataProvider == null)
			{
				return;
			}
			
			if(stage == null)
			{
				return;
			}
			
			if(_viewChanged == false)
			{
				return;
			}
			
			updataView();
		}
		
		public function getTextFormat():TextFormat
		{
			return _defaultTxt.getTextFormat();
		}
		
		public function setTextFormat(format:TextFormat):void
		{
			NxTextFormatManager.setFormatToOld(format,_format);
			NxTextFormatManager.updataTextFormat(_defaultTxt,_format);
		}
		
		/**
		 * 强制刷新显示。
		 * */
		public function updataView():void
		{
			if(_viewChanged == false)
			{
				return;
			}
			
			var tSize	:int		=	_dataProvider.length;
			var tLabel	:TextField;

			//如果没有打开子节点
			if(_openIndexs == null || _openIndexs.length == 0)
			{
				for(var i:int = 0 ; i < tSize ; i ++)
				{
					tLabel				=	new TextField();
					
					NxTextFormatManager.updataTextFormat(tLabel,_format);
					
					tLabel.name			=	"l_0_"+i;
					tLabel.htmlText		=	_dataProvider[i][0];	
					tLabel.selectable	=	false;	
					tLabel.x			=	xOffSize[0];
					tLabel.y			=	yOffSize[0]*i;
					tLabel.autoSize		=	TextFieldAutoSize.LEFT;
					
					tLabel.addEventListener(MouseEvent.CLICK,onTreeNodeClick);
					addChild(tLabel);
				}
				
			}
			_viewChanged	=	false;
		}
		
		/**
		 * 点击节点
		 * */
		private function onTreeNodeClick(e:MouseEvent):void
		{
			var tLabelName	:String	=	e.target.name;
			
			var tData		:Array	=	tLabelName.split("_");
			tData.shift();
			trace(tData)
			
		}
		
		/**
		 * 展开节点
		 * */
		private function openNode(val:Array):void
		{
			
		}

		/**
		 * 包含节点的信息的Array
		 */
		public function get dataProvider():Array
		{
			return _dataProvider;
		}

		/**
		 * @private
		 */
		public function set dataProvider(value:Array):void
		{
			if(_dataProvider != value)
			{
				_dataProvider 	= 	value;
				_viewChanged	=	true;
			}
		}

	}
}